import sys

from config import config
from lib import HTMLTestRunner_PY3


class GernaterResult:

    def __init__(self):
        report_path = config.reports_path
        f = open(report_path, 'wb')
        # 使用HTMLTestRunner实例化runner对象
        self.runner = HTMLTestRunner_PY3.HTMLTestRunner(f)
        self.result_list = list()

    def run_case(self, test_cases):
        # 使用实例化的runner对象运行测试用例，得到result的结果（此时还不会有HTML测试报告）
        result = self.runner.run(test_cases)
        # 添加result到列表中（适应多线程）
        self.result_list.append(result)
        return result

    def combine_result(self):
        # 读取第一个result_list中的result数据（读取的原因：需要把result_list的其他结果都整合到第一个
        first_result = self.result_list[0]  # type:HTMLTestRunner_PY3._TestResult
        # 遍历result_list
        for index in range(1, len(self.result_list)):

            for temp in self.result_list[index].result:
                if temp[0] == 0:
                    first_result.addSuccess(temp[1])
                if temp[0] == 1:
                    first_result.addFailure(temp[1], sys.exc_info())
                if temp[0] == 2:
                    first_result.addError(temp[1], sys.exc_info())
        # 返回拼接完成的所有resul数据
        return first_result
